#!/bin/bash
dir_actual=`pwd`
dir_archivos_ok="${dir_actual}/ArchPruebas"
dir_programa="${dir_actual}"


dir="${dir_actual}/resultados"

if [ ! -d "$dir" ] ; then 
	mkdir "$dir"
fi


if [ $# -eq 0 ] ; then 
	echo "Se tomará por defecto el nombre de Tp0\n"
	nombre="${dir_programa}/Tp0"
else
	nombre="${dir_programa}/${1}"
fi

#chequeo que esten mal las direcciones de los archivos
if [ ! -d "$dir_archivos_ok" ] ; then  
	echo "Error en el directorio de archivos\n"
	exit 1
elif [ ! -d "$dir_programa" ] ; then 
	echo "Error en el directorio del programa\n"
	exit 1
elif [ ! -f "$nombre" ] ; then 
	echo "Error en el archivo ejecutable \n" 
	exit 1
fi
	
#Pruebas

#testeo que las salidas del tac sean iguales que las del tp

stac="${dir}/salida_tac"
stp="${dir}/salida_tp"

#Prueba 1: testeo que los archivos que estan en el directorio de archivos sean procesados igual que por el tac
cat "${dir_archivos_ok}"/* | "$nombre" >"${stp}.1"
cat "${dir_archivos_ok}"/* | tac >"${stac}.1"
diff "${stac}.1" "${stp}.1" >/dev/null
if [ $? -eq 0 ] ; then
	echo "Prueba 1 Ok\n"
else
	echo "Pueba 1 Error\n"
fi

#Prueba 2: testeo lo mismo pero esta vez pasando los archivos por consola 
tac "${dir_archivos_ok}"/* >"${stac}.2"
"$nombre" "${dir_archivos_ok}"/* >"${stp}.2"
diff "${stac}.2" "${stp}.2" >/dev/null
if [ $? -eq 0 ] ; then 
	echo "Prueba 2 Ok\n"
else
	echo "Pueba 2 Error\n"
fi

#Prueba 3: testeo que lo que despues de pasar dos veces las salida salga el archivo original
cat "${dir_archivos_ok}"/* | "$nombre" | "$nombre" >"${stp}.3"
cat "${dir_archivos_ok}"/* | tac | tac >"${stac}.3"
diff "${stac}.3" "${stp}.3" >/dev/null
if [ $? -eq 0 ] ; then
	echo "Prueba 3 Ok\n"
else
	echo "Pueba 3 Error\n"
fi

#Prueba 4: testeo lo mismo que en la prueba 3 pero por archivo y no por stdin
"$nombre" "${dir_archivos_ok}"/* | tee "${stp}.5" | "$nombre" >"${stp}.4"
tac "${dir_archivos_ok}"/* | tee "${stac}.5" | tac >"${stac}.4"
diff "${stac}.4" "${stp}.4" >/dev/null
if [ $? -eq 0 ] ; then 
	echo "Prueba 4 Ok\n"
else
	echo "Pueba 4 Error\n"
fi


#Prueba 5
diff "${stac}.5" "${stp}.5" >/dev/null
if [ $? -eq 0 ] ; then 
	echo "Prueba 5 Ok\n"
else
	echo "Pueba 5 Error\n"
fi

#Prueba 6 
cont=6

for fichero in $(ls -1 "$dir_archivos_ok")
do
	
	cat "${dir_archivos_ok}/${fichero}" | "$nombre" >"${dir}/${fichero}.tp"
	cat "${dir_archivos_ok}/${fichero}" | tac >"${dir}/${fichero}.tac"
	diff "${dir}/${fichero}.tp" "${dir}/${fichero}.tac" >/dev/null
	
	if [ $? -eq 0 ] ; then
		echo "Prueba $cont Ok \n"
	else
		echo "Pueba $cont Error en $fichero \n"
	fi
	
	cont=`expr $cont + 1` 

	
done
